<?php
/**
 * SimpleAdministration
 *
 * Класс предназначен для проверки пользовательских прав
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class SimpleAdministration {

  /**
   * Метод проверяет права на работу с материалом по типу сущности и его идентификатору
   *
   * @param mixed $essenceType
   * @param integer $essenceId
   * @return boolean
   */
  public static function isAviableMaterial($essenceType, $essenceId) {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    $essenceTypeName = Service_Essence::getEssenceTypeName($essenceType);
    $objDB = Service_Database::instance();
  	$stmt = " SELECT `" . $essenceTypeName . "`.`ID_" . $essenceTypeName . "`
  						FROM `" .  $essenceTypeName . "`
  						WHERE `" .  $essenceTypeName . "`.`ID_" .  $essenceTypeName . "` = " . intval($essenceId) . "
  						AND `" .  $essenceTypeName . "`.`ID_user` = " . intval($objUser->id);
  	return $objDB->isRecordExist($stmt);
  }

  /**
   * Метод проверяет, является ли пользователь автором или админом
   *
   * @param integer $authorId
   * @return boolean
   */
  public static function isAuthorOrAdmin($authorId) {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    if ($authorId == $objUser->id) return true;
    else return false;
  }

  /**
   * Метод проверяет, является ли пользователь гидом или админом
   *
   * @return boolean
   */
  public static function isGuideOrAdmin() {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    elseif ($objUser->getField('is_guide')) return true;
    else return false;
  }

    /**
   * Метод проверяет, является ли пользователь админом
   *
   * @return boolean
   */
  public static function isAdmin() {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    else return false;
  }
    /**
   * Метод проверяет, является ли пользователь сильным админом
   *
   * @return boolean
   */
  public static function isStrongAdmin() {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin') > 1) return true;
    else return false;
  }

    /**
   * Метод проверяет, является ли пользователь менеджером компании
   *
   * @return boolean
   */
  public static function isManager($companyId) {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    $objCompany = new Company($companyId);
    if (($objUser->getField('ID_user') == $objCompany->getField('ID_manager')) || ($objUser->getField('ID_user') == $objCompany->getField('ID_manager_2'))) return true;

    else return false;
  }


  /**
   * Метод проверяет, является ли пользователь админом с правами доступа к платежам
   *
   * @return boolean
   */
  public static function isOrdersAdmin() {
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin') > 1) return true;
    else return false;
  }


  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не имеет права на работу с материалом по типу сущности и его идентификатору
   * В противном случае возвращает идентификатор пользователя true
   *
   * @param mixed $essenceType
   * @param integer $essenceId
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotAviableMaterial($essenceType, $essenceId, $location, $message = null) {
    if (! self::isAviableMaterial($essenceType, $essenceId)) User_Session::moveTo($location, $message);
    return true;
  }

  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не является автором или админом
   * В противном случае возвращает идентификатор пользователя
   *
   * @param integer $authorId
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotAuthorOrAdmin($authorId, $location, $message = null) {
    if (! self::isAuthorOrAdmin($authorId)) User_Session::moveTo($location, $message);
    return true;
  }

  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не является гидом или админом
   * В противном случае возвращает идентификатор пользователя
   *
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotGuideOrAdmin($location, $message = null) {
    if (! self::isGuideOrAdmin()) User_Session::moveTo($location, $message);
    return true;
  }

  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не является админом
   * В противном случае возвращает идентификатор пользователя
   *
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotAdmin($location, $message = null) {
    if (! self::isAdmin()) User_Session::moveTo($location, $message);
    return true;
  }


}